package com.zx.zxpicture.infrstructure.api.imgSearchimg;

import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

import com.zx.zxpicture.infrstructure.exception.BusinessException;
import com.zx.zxpicture.infrstructure.api.imgSearchimg.model.ImageSearchResult;
import com.zx.zxpicture.infrstructure.common.ErrorCode;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * 获取相似图列表
 */
@Slf4j
public class GetImageList {
    /**
     * 获取以图搜图的图片列表
     * @param imageInterfaceUrl 相似图的接口url
     * @return 相似图列表
     */
    public static List<ImageSearchResult> getImageList(String imageInterfaceUrl){
        //使用HttpUtil获取接口json对象数据
        HttpResponse response = HttpUtil.createGet(imageInterfaceUrl).execute(); //响应头 响应体 响应状态码
        //获取响应状态码
        int status = response.getStatus();
        //获取响应内容
        String body = response.body();
        if(status == 200){
            //解析JSON数据并处理
            return processResponse(body);
        }else {
            log.error("获取图片列表失败");
            throw new BusinessException(ErrorCode.OPERATION_ERROR, "获取图片列表失败");
        }
    }
    private static List<ImageSearchResult> processResponse(String responseBody){
        //解析JSON数据并处理
        //这个JSONObject是专门用来解析JSON数据的，获取json数据中的key和value
        JSONObject jsonObject = new JSONObject(responseBody);
        if(!jsonObject.containsKey("data")){
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "未获取到图片列表");
        }
        JSONObject data = jsonObject.getJSONObject("data");
        if(!data.containsKey("list")){
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "未获取到图片列表");
        }
        JSONArray list = data.getJSONArray("list");
        return JSONUtil.toList(list, ImageSearchResult.class);
    }
    public static void main(String[] args) {
        System.out.println(getImageList("https://graph.baidu.com/ajax/pcsimi?carousel=503&entrance=GENERAL&extUiData%5BisLogoShow%5D=1&inspire=general_pc&limit=30&next=2&render_type=card&session_id=7835791382836537628&sign=12699070fa0b240c750fb01740911851&tk=4d8e6&tpl_from=pc"));
    }
}
